package kr.co.dayve.site.management.controller;


import kr.co.dayve.site.domain.*;
import kr.co.dayve.site.management.util.DayveCommon;

import kr.co.dayve.site.management.service.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.UUID;


/**
 * 게시판 외의 기능 컨트롤러
 * 도움말, 문의사항, 회원관리
 */
public class DayveController extends MultiActionController {

    // SLF4J Logging
    private Logger logger = LoggerFactory.getLogger(DayveController.class);

    /**
     *
     * @param request HttpServletRequest
     * @param response HttpServletReponse
     * @return ModelAndView
     */
    public ModelAndView index(HttpServletRequest request, HttpServletResponse response) {
        
        return new ModelAndView("index");
    }

    public ModelAndView contactMember(HttpServletRequest request, HttpServletResponse response)  throws Exception {
        return new ModelAndView("contactMember");
    }

    public ModelAndView intro(HttpServletRequest request, HttpServletResponse response)  throws Exception {
        /*
         * 메뉴 페이지 이동
         * 파라미터에서 받아온 멤버 정보에서 아이디를 추출하여
         * 도메인에 멤버 정보를 주입한다
         * mav 에 멤버 도메인과 이동할 뷰 네임을 담아 mav 를 return

         * Member member = new Member();
         * bind(request, member);
         * member = dayveService.getMemberInfoById(member.getUserId());
         * ModelAndView mav = new ModelAndView("intro", "member", member);
         * return mav;
         */
        //PropertiesUtil propertiesUtil = new PropertiesUtil();
        //

//        logger.info("Properties");
//        logger.info("sessionInterval                 : {}", this.getSessionInterval());
//        logger.info("passwordActivateInterval        : {}", this.getPasswordActivateInterval());

        
        return new ModelAndView("intro");
    }

    public ModelAndView notice(HttpServletRequest request, HttpServletResponse response)  throws Exception {

        /*
         * 메뉴 페이지 이동
         * 파라미터에서 받아온 멤버 정보에서 아이디를 추출하여
         * 도메인에 멤버 정보를 주입한다
         * mav 에 멤버 도메인과 이동할 뷰 네임을 담아 mav 를 return


         * Member member = new Member();
         * bind(request, member);
         * member = dayveService.getMemberInfoById(member.getUserId());
         * ModelAndView mav = new ModelAndView("intro", "member", member);
         * return mav;
         */

        return new ModelAndView("notice");
    }

    public ModelAndView faq(HttpServletRequest request, HttpServletResponse response)  throws Exception {

        /*
        * 메뉴 페이지 이동
        * 파라미터에서 받아온 멤버 정보에서 아이디를 추출하여
        * 도메인에 멤버 정보를 주입한다
        * mav 에 멤버 도메인과 이동할 뷰 네임을 담아 mav 를 return
        *
        * FAQ 페이지를 모바일에서 보기 위해 browsercheck 를 통해 넘어온 파라미터를 받아서 넘겨준다.
        * 1 : 아이폰, 2 : 안드로이드, 3 : else
        */

        ModelAndView mav = new ModelAndView();
        mav.setViewName("faq");
        mav.addObject("browserType", request.getParameter("browserType"));
        return mav;
    }

    public ModelAndView browsercheck(HttpServletRequest request, HttpServletResponse response)  throws Exception {

        /**
         * 단말기에서 faq 페이지에 접근하기 위해
         * browsercheck 를 하고 browserType 을 Parameter 로 넘겨준다
         *
         */

        return new ModelAndView("browsercheck");
    }

    public ModelAndView mobileNotice(HttpServletRequest request, HttpServletResponse response)  throws Exception {

        /**
         * 단말기에서 mobileNotice 페이지에 접근하기 위해
         * browsercheck 를 하고 browserType 을 Parameter 로 넘겨준다
         *
         */

        return new ModelAndView("mobileNotice");
    }

    public ModelAndView community(HttpServletRequest request, HttpServletResponse response)  throws Exception {

        /*
        * 메뉴 페이지 이동
        * 파라미터에서 받아온 멤버 정보에서 아이디를 추출하여
        * 도메인에 멤버 정보를 주입한다
        * mav 에 멤버 도메인과 이동할 뷰 네임을 담아 mav 를 return


        * Member member = new Member();
        * bind(request, member);
        * member = dayveService.getMemberInfoById(member.getUserId());
        * ModelAndView mav = new ModelAndView("intro", "member", member);
        * return mav;
        */

        return new ModelAndView("community");
    }

    public ModelAndView photo(HttpServletRequest request, HttpServletResponse response)  throws Exception {

        /*
        * 메뉴 페이지 이동
        * 파라미터에서 받아온 멤버 정보에서 아이디를 추출하여
        * 도메인에 멤버 정보를 주입한다
        * mav 에 멤버 도메인과 이동할 뷰 네임을 담아 mav 를 return


        * Member member = new Member();
        * bind(request, member);
        * member = dayveService.getMemberInfoById(member.getUserId());
        * ModelAndView mav = new ModelAndView("intro", "member", member);
        * return mav;
        */

        return new ModelAndView("photo");
    }

    public ModelAndView contactus(HttpServletRequest request, HttpServletResponse response)  throws Exception {

        /*
         * 메뉴 페이지 이동
         * 파라미터에서 받아온 멤버 정보에서 아이디를 추출하여
         * 도메인에 멤버 정보를 주입한다
         * mav 에 멤버 도메인과 이동할 뷰 네임을 담아 mav 를 return


         * Member member = new Member();
         * bind(request, member);
         * member = dayveService.getMemberInfoById(member.getUserId());
         * ModelAndView mav = new ModelAndView("intro", "member", member);
         * return mav;
         */

        return new ModelAndView("contactus");
    }


    public ModelAndView changeLocale(HttpServletRequest request, HttpServletResponse response) {
        String language = request.getParameter("language");
        Locale locale = new Locale(language);
        localeResolver.setLocale(request, response, locale);
        return new ModelAndView("intro");
    }


    /**
     * id 로 Member 정보를 얻어온다.
     *
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView getMemberInfoById(HttpServletRequest request, HttpServletResponse response) throws Exception {
        Member member = new Member();
        bind(request, member);

        member = dayveService.getMemberById(member.getId());

//        logger.info("getMemberInfoById");
//        logger.info("id        : {}", member.getId());


        ModelAndView mav = new ModelAndView(request.getParameter("nextTarget"), "member", member);
        return mav;
//        return new ModelAndView("memberInfo");
    }

    /**
     * 로그인 컨트롤러
     * id, password 대조 후 일치 시
     * HttpSession 에 필요한 정보를 담는다 id, email, nick name, level
     *
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView login(HttpServletRequest request, HttpServletResponse response) throws Exception {



        Member member = new Member();
        bind(request, member);
        String id = member.getId();

        logger.info("login");
        logger.info("id        : {}", member.getId());

        String result = dayveService.logIn(id, member.getPassword());
        if(result == "SUCCESS"){ //로그인 서비스 성공


            Member smember = new Member(); //세션에 담을 정보를 가져올 도메인
            smember = dayveService.getMemberById(id); // 로그인에 성공한 id를 이용하여 도메인에 멤버 정보를 담아온다

            String email = smember.getEmail();
            String nickName = smember.getNick_name();
            String level = smember.getLevel();

            // 로그인 최종 성공시 세션에 멤버의 정보를 담는다
            HttpSession session = request.getSession();

            session.setAttribute("userId", id);
            session.setAttribute("email", email);
            session.setAttribute("nickName", nickName);
            session.setAttribute("level", level);


            ModelAndView mav = new ModelAndView(request.getParameter("nextTarget"), "member", smember);
            return mav;
        }else{
            return new ModelAndView("intro");
        }
    }

    /**
     * 로그아웃 컨트롤러
     * HttpSession 을 반환하고 index 페이지로 복귀
     *
     * @param request
     * @param response
     * @return
     */
    public ModelAndView logout(HttpServletRequest request, HttpServletResponse response){

        HttpSession session = request.getSession(); // 세션 값 반환
        session.invalidate(); // 세션을 삭제하고 index 페이지로 복귀
        return new ModelAndView("index");
    }

    /**
     * 회원가입 컨트롤러
     *
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView insertAction(HttpServletRequest request, HttpServletResponse response) throws Exception {

        Member member = new Member(); // 도메인 생성
        bind(request, member);

        DayveCommon common = new DayveCommon();

        member.setLevel("4");
        member.setMileage("0");
        member.setActivate_yn("Y");
        member.setPassword(common.getEncodedPassword(request.getParameter("password")));
        member.setCountry("");
        member.setOpen_country_yn("Y");
        member.setHome_page("");
        member.setOpen_home_page_yn("Y");
        //member.setModify_date("브라우저에서 넘어온 날짜시간");
        //member.setRegister_date("브라우저에서 넘어온 날짜시간");

        logger.info("insertAction");
        logger.info("id        : {}", member.getId());


        String result = "";

        result = dayveService.insertMember(member); // insert Member 서비스 호출


        ModelAndView mav = new ModelAndView(request.getParameter("nextTarget"));
        return mav;

    }

    /**
     * 회원 탈퇴 컨트롤러
     * activate_yn = n 으로 해야됨
     *
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView deleteMemberById(HttpServletRequest request, HttpServletResponse response) throws Exception {
        Member member = new Member(); // 도메인 생성
        bind(request, member);
        String result = "";

        logger.info("deleteMember");
        logger.info("id        : {}", member.getId());


        result = dayveService.deleteMemberById(member.getId()); // 멤버ID 를 이용해 회원탈퇴 서비스 호출
        return new ModelAndView("index"); // index 화면으로 돌아감
//        return new ModelAndView("memberInfo");
    }

    /**
     * 회원정보 수정 컨트롤러
     *
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView updateMember(HttpServletRequest request, HttpServletResponse response) throws Exception{

        HttpSession session = request.getSession(false); // 세션을 반환받는다

        Member member = new Member();
        bind(request, member);

        if(session == null){
            return new ModelAndView("index");
        }

        if((String)session.getAttribute("userId") == null){
            return new ModelAndView("index");
        }

        /* For Broad Castion */
        String member_information = (String)session.getAttribute("user_information");

        /**
         * Must Delete function
         */


        member = dayveService.getMemberById((String) session.getAttribute("userId")); //세션의 userID 값을 받아와 해당 아이디의 도메인을 받아 다음 타겟 페이지로 넘겨준다
        java.util.List countryList = dayveService.getCountryList();
        String countryTotalCount = dayveService.getTotalCountCountry();


//        logger.info("updateMember");
//        logger.info("id        : {}", session.getAttribute("userId"));
//        logger.info("open_c    : {}", member.getOpen_country_yn());
//        logger.info("open_e    : {}", member.getOpen_email_yn());
//        logger.info("open_m    : {}", member.getOpen_mobile_phone_yn());
//        logger.info("open_n    : {}", member.getOpen_nick_name_yn());
//        logger.info("open_h    : {}", member.getOpen_home_page_yn());
//        logger.info("sex       : {}", member.getSex());


        ModelAndView mav = new ModelAndView();
        mav.setViewName(request.getParameter("nextTarget"));
        mav.addObject("member", member);
        mav.addObject("countryList", countryList);
        mav.addObject("countryTotalCount", countryTotalCount);

        return mav;
    }

    /**
     * 회원정보 수정 실행 컨트롤러
     *
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView updateAction(HttpServletRequest request, HttpServletResponse response) throws Exception{
        Member member = new Member();
        bind(request, member);
        String result = "";

        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        String strDate = df.format(new Date());

        member.setModify_date(strDate);

        if(member.getOpen_email_yn() == null){
            member.setOpen_email_yn("N");
        }

        if(member.getOpen_mobile_phone_yn() == null){
            member.setOpen_mobile_phone_yn("N");
        }

        if(member.getOpen_country_yn() == null){
            member.setOpen_country_yn("N");
        }

        if(member.getOpen_home_page_yn() == null){
            member.setOpen_home_page_yn("N");
        }

        if(member.getOpen_nick_name_yn() == null){
            member.setOpen_nick_name_yn("N");
        }

        logger.info("updateAction");
        logger.info("id        : {}", member.getId());
//        logger.info("open_c    : {}", member.getOpen_country_yn());
//        logger.info("open_e    : {}", member.getOpen_email_yn());
//        logger.info("open_m    : {}", member.getOpen_mobile_phone_yn());
//        logger.info("open_n    : {}", member.getOpen_nick_name_yn());
//        logger.info("open_h    : {}", member.getOpen_home_page_yn());
//        logger.info("sex       : {}", member.getSex());


        result = dayveService.updateMemberById(member); // 도메인에서 userid를 받아와 update action 을 수행하고 result 에 결과 저장
        member = dayveService.getMemberById(member.getId()); // 새롭게 멤버 정보를 받아와 도메인에 주입한다. 세션 재 섫정 필요
        return new ModelAndView(request.getParameter("nextTarget"), "member", member);
    }

    /**
     * Send Contact
     * 문의 사항 DB에 기록
     *
     * 문의 관련 파일은 다른 경로에 기록
     *
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView sendContact(HttpServletRequest request, HttpServletResponse response) throws Exception{

        Contact contact = new Contact();
        bind(request, contact);



        // 파일 업로드 시작
        MultipartHttpServletRequest mpRequest = (MultipartHttpServletRequest) request; // HttpServletRequest 를 MultipartHttpServletRequest 로 casting

        MultipartFile mpFile = mpRequest.getFile("fileUp"); // casting 된 request 에서 파일 얻어오기

        if(mpFile.isEmpty()){ // 첨부 파일이 있는지 검사
            contact.setAdd_file_yn("N");
            contact.setAdd_file_original_name("");
            contact.setAdd_file_temp_name("");
            contact.setAdd_file_content_type("");
            contact.setAdd_file_size("");
        }else{
            String uploadPath = request.getRealPath("/");
            DayveFile file = communityBoardService.uploadFile(mpFile, uploadPath + "/upload/contact/"); // 있다면 파일 업로드 서비스를 수행 (MultipartFile, 업로드 경로)

            /**
             * 첨부파일에 관련된 속성들을 도메인에 셋팅
             */
            contact.setAdd_file_yn("Y");
            contact.setAdd_file_original_name(file.getFileName());
            contact.setAdd_file_temp_name(file.getTempFileName());
            contact.setAdd_file_content_type(file.getContentType());
            contact.setAdd_file_size(file.getFileSize());

        }
        // 파일 업로드 끝

        String result = "";


        // 작성자 정보 입력

        HttpSession session = request.getSession(false);
        
        if(session == null){
            return new ModelAndView("index");
        }

        if((String)session.getAttribute("userId") == null){
            return new ModelAndView("index");
        }
        contact.setWriter_id((String)session.getAttribute("userId"));
        contact.setWriter_nick_name((String)session.getAttribute("nickName"));
        contact.setWriter_email((String)session.getAttribute("email"));
        contact.setActivate_yn("Y");
        contact.setComplete_yn("N");

        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        String strDate = df.format(new Date());

        contact.setRegister_date(strDate);

        result = dayveService.writeContact(contact); // writeBoard 서비스를 호출 결과를 result 에 담는다

        logger.info("sendContact");
        logger.info("id        : {}", contact.getWriter_id());
        logger.info("result    : {}", result);



        return new ModelAndView(request.getParameter("nextTarget"));
    }

    public ModelAndView terms(HttpServletRequest request, HttpServletResponse response)  throws Exception {

        /*
         * 메뉴 페이지 이동
         * 파라미터에서 받아온 멤버 정보에서 아이디를 추출하여
         * 도메인에 멤버 정보를 주입한다
         * mav 에 멤버 도메인과 이동할 뷰 네임을 담아 mav 를 return


         * Member member = new Member();
         * bind(request, member);
         * member = dayveService.getMemberInfoById(member.getUserId());
         * ModelAndView mav = new ModelAndView("intro", "member", member);
         * return mav;
         */

        return new ModelAndView("terms");
    }

    public ModelAndView privacy(HttpServletRequest request, HttpServletResponse response)  throws Exception {

        /*
         * 메뉴 페이지 이동
         * 파라미터에서 받아온 멤버 정보에서 아이디를 추출하여
         * 도메인에 멤버 정보를 주입한다
         * mav 에 멤버 도메인과 이동할 뷰 네임을 담아 mav 를 return


         * Member member = new Member();
         * bind(request, member);
         * member = dayveService.getMemberInfoById(member.getUserId());
         * ModelAndView mav = new ModelAndView("intro", "member", member);
         * return mav;
         */

        return new ModelAndView("privacy");
    }

    public ModelAndView findId(HttpServletRequest request, HttpServletResponse response)  throws Exception {

        /*
         * 메뉴 페이지 이동
         * 파라미터에서 받아온 멤버 정보에서 아이디를 추출하여
         * 도메인에 멤버 정보를 주입한다
         * mav 에 멤버 도메인과 이동할 뷰 네임을 담아 mav 를 return


         * Member member = new Member();
         * bind(request, member);
         * member = dayveService.getMemberInfoById(member.getUserId());
         * ModelAndView mav = new ModelAndView("intro", "member", member);
         * return mav;
         */

        return new ModelAndView("findId");
    }

    public ModelAndView findPassword(HttpServletRequest request, HttpServletResponse response)  throws Exception {

        /*
         * 메뉴 페이지 이동
         * 파라미터에서 받아온 멤버 정보에서 아이디를 추출하여
         * 도메인에 멤버 정보를 주입한다
         * mav 에 멤버 도메인과 이동할 뷰 네임을 담아 mav 를 return


         * Member member = new Member();
         * bind(request, member);
         * member = dayveService.getMemberInfoById(member.getUserId());
         * ModelAndView mav = new ModelAndView("intro", "member", member);
         * return mav;
         */

        return new ModelAndView("findPassword");
    }

    /**
     * 아이디, 비번찾기 메일 보내기
     *
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView sendMail(HttpServletRequest request, HttpServletResponse response) throws Exception{

        Member mailMember = new Member();

        /**
         * mailType
         * 1 : id 찾기, 2 : password 찾기
         *
         */

        String subject = "";
        String content = "";
        String sendMailResult = "";
        String resultFlag = ""; // 1 : 성공, 2 : id 찾기에서 실패, 3 : password 찾기에서 실패

        if(request.getParameter("mailType").equals("1")){
            if("0".equals(dayveService.getMemberExistByEmail(request.getParameter("fId_email")))){
                sendMailResult = "등록되지 않은 메일 주소 입니다.";
                resultFlag = "2";

            }else{
                mailMember = dayveService.getMemberByEmail(request.getParameter("fId_email"));

                subject = "Dayve 아이디 찾기"; // 메일 제목
                content = "귀하의 아이디는 " + mailMember.getId() + "입니다."; // 메일 내용

                String userId = mailMember.getId(); // request.getParameter("userId") 고객ID
                String fromUser = "dayve@dayve.co.kr"; // 보내는 사람 관리자 이메일 주소
                String toUser = mailMember.getEmail(); // 아이디 비번 찾는 사람 이메일 주소

                //sendMail(제목, 내용, 보내는 사람, 받는 사람, 운영자이름)
                sendMailResult = dayveService.sendMail(subject, content, fromUser, toUser, userId);
                if(sendMailResult.equals("1")){
                    //임시 비밀번호로 업데이트
                    sendMailResult = "회원님의 메일주소로 아이디가 발송되었습니다.";
                    resultFlag = "1";
                }else{
                    sendMailResult = "메일 전송에 실패하였습니다.";
                    resultFlag = "2";
                }
            }

        }else if(request.getParameter("mailType").equals("2")){
            Member member = new Member();

            member.setId(request.getParameter("fPassword_id"));
            member.setEmail(request.getParameter("fPassword_email"));

            if("0".equals(dayveService.getMemberExistByIdEmail(member))){
                sendMailResult = "아이디 혹은 메일이 일치하지 않습니다.";
                resultFlag = "3";

            }else{


                member.setId(request.getParameter("fPassword_id"));
                member.setEmail(request.getParameter("fPassword_email"));

                mailMember = dayveService.getMemberByIdEmail(member);

                subject = "Dayve 비밀번호 찾기"; // 메일 제목
                //content = mailMember.getId() + "님의 비밀번호는 " + mailMember.getPassword() + "입니다.<br>"; // 메일 내용

                /**
                 * String Image 화 하기
                 * UUID 를 이용해 랜덤 문자 생성 후 "-" 문자를 제거
                 * 12번째 문자까지 잘라낸 후 이미지 생성
                 */

                Frame frame = null;
                Graphics g = null;

                UUID uuid = UUID.randomUUID(); // 랜덤 UUID 이름 생성
                String tempPassword = uuid.toString();
                tempPassword = tempPassword.replaceAll("-", "");

                tempPassword = tempPassword.substring(0, 8);

                content = "<html><body>" + mailMember.getId() + " 회원님의 8자리 임시 비밀번호가 발급되었습니다.<br><br><br>" +
                        "<img src='cid:pImage' border=0><br><br><br>" +
                        "기존에 사용하시던 DAYVE 애플리케이션을 삭제하시고 다시 설치하신 뒤<br>" +
                        "발급 받으신 임시 비밀번호로 로그인을 하시기 바랍니다.<br><br>" +
                        "로그인 하신 뒤 반드시 새로운 비밀번호로 변경해 주세요.</body></html>"; // 메일 내용


                // 200 x 200 사이즈로 RGB 색생을 이용하는 BufferedImage 객체를 생성한다.
                BufferedImage image
                        = new BufferedImage(350,80, BufferedImage.TYPE_INT_RGB); // 그림을 그리기 위해 Graphics2D를 얻어온다.
                //버퍼드 이미지를 파일로 저장.
                Graphics graphics = image.createGraphics(); // 노란색으로 설정한다.

                graphics.drawLine(10,20,10,10);//
                graphics.setFont(new Font("Serif", Font.ITALIC, 50));
                graphics.drawString(tempPassword , 10, 50); // 임시 변경 비밀번호 를 이미지화
                graphics.setColor(new Color(0x339900));

                File file = new File(request.getRealPath("/") + "/upload/password/" + tempPassword + ".jpg");

                try {
                    ImageIO.write(image, "jpeg", file);
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }

                mailMember = dayveService.getMemberByIdEmail(member);

                String userId = mailMember.getId(); // request.getParameter("userId") 고객ID
                String fromUser = "dayve@dayve.co.kr"; // 보내는 사람 관리자 이메일 주소
                String toUser = mailMember.getEmail(); // 아이디 비번 찾는 사람 이메일 주소

                //sendMail(제목, 내용, 보내는 사람, 받는 사람, 운영자이름)
                sendMailResult = dayveService.sendImageMail(subject, content, fromUser, toUser, userId, file);
                if(sendMailResult.equals("1")){
                    //임시 비밀번호로 업데이트
                    DayveCommon common = new DayveCommon();

                    mailMember.setPassword(common.getEncodedPassword(tempPassword));
                    dayveService.updateMemberPasswordById(mailMember);
                    sendMailResult = "회원님의 메일주소로 임시 비밀번호가 발급되었습니다.";
                    resultFlag = "1";
                }else{
                    sendMailResult = "메일 전송에 실패하였습니다.";
                    resultFlag = "3";
                }
            }
        }

        ModelAndView mav = new ModelAndView();

        mav.setViewName(request.getParameter("nextTarget"));
        mav.addObject("sendMailResult", sendMailResult);
        mav.addObject("resultFlag", resultFlag);
        return mav;
    }


    /**
     * 게시글 신고 팝업을 띄운다.
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView communityReport(HttpServletRequest request, HttpServletResponse response)  throws Exception {
        Report report = new Report();
        String reported = "false";         // 중복 신고 여부.
        HttpSession session = request.getSession(false);
        String memberId = (String)session.getAttribute("userId");
        report.setUser_id(memberId);
        report.setContent_no(request.getParameter("boardno"));

        String checkDuplicate = communityBoardService.checkDuplicateReport(report);
        // 신고 체크
        if(checkDuplicate.equals("0")){
            // 최초 신고 입니다.
            reported = "false";
        }else{
            // 중복 신고.. 이미 신고하셨습니다.
            reported = "true";
        }

        /*
         * 메뉴 페이지 이동
         * 파라미터에서 받아온 멤버 정보에서 아이디를 추출하여
         * 도메인에 멤버 정보를 주입한다
         * mav 에 멤버 도메인과 이동할 뷰 네임을 담아 mav 를 return

         * Member member = new Member();
         * bind(request, member);
         * member = dayveService.getMemberInfoById(member.getUserId());
         * ModelAndView mav = new ModelAndView("intro", "member", member);
         * return mav;
         */
        ModelAndView mav = new ModelAndView();
        mav.setViewName("communityReport");
        mav.addObject("reported", reported);
        mav.addObject("content_no", request.getParameter("boardno"));
        mav.addObject("page", request.getParameter("page"));
        return mav;
    }

    /**
     * 갤러리 게시글 신고 팝업을 띄운다.
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView photoReport(HttpServletRequest request, HttpServletResponse response)  throws Exception {
        Report report = new Report();
        String reported = "false";         // 중복 신고 여부.
        HttpSession session = request.getSession(false);
        String memberId = (String)session.getAttribute("userId");
        report.setUser_id(memberId);
        report.setContent_no(request.getParameter("boardno"));

        String checkDuplicate = photoBoardService.checkDuplicateReport(report);
        // 신고 체크
        if(checkDuplicate.equals("0")){
            // 최초 신고 입니다.
            reported = "false";
        }else{
            // 중복 신고.. 이미 신고하셨습니다.
            reported = "true";
        }
        /*
         * 메뉴 페이지 이동
         * 파라미터에서 받아온 멤버 정보에서 아이디를 추출하여
         * 도메인에 멤버 정보를 주입한다
         * mav 에 멤버 도메인과 이동할 뷰 네임을 담아 mav 를 return

         * Member member = new Member();
         * bind(request, member);
         * member = dayveService.getMemberInfoById(member.getUserId());
         * ModelAndView mav = new ModelAndView("intro", "member", member);
         * return mav;
         */
        ModelAndView mav = new ModelAndView();
        mav.setViewName("photoReport");
        mav.addObject("reported", reported);
        mav.addObject("content_no", request.getParameter("boardno"));
        mav.addObject("page", request.getParameter("page"));
        return mav;
    }


    /**
     * 갤러리 게시글 신고 팝업을 띄운다.
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView mi(HttpServletRequest request, HttpServletResponse response)  throws Exception {
        logger.info("mi = mobile introduce page call");
        logger.info("lan : {}", request.getParameter("lan"));
        return new ModelAndView("mi");
    }


    ///////////////////////////////////////
    // Spring Framework Setter Injection //
    ///////////////////////////////////////

    private DayveService dayveService;
    private LocaleResolver localeResolver;
    private CommentService commentService;
    private CommunityBoardService communityBoardService;
    private PhotoBoardService photoBoardService;
    private NoticeBoardService noticeBoardService;



    public void setLocaleResolver(LocaleResolver localeResolver) {
        this.localeResolver = localeResolver;
    }

    public void setCommentService(CommentService commentService) {
        this.commentService = commentService;
    }

    public void setDayveService(DayveService dayveService) {
        this.dayveService = dayveService;
    }

    public void setCommunityBoardService(CommunityBoardService communityBoardService) {
        this.communityBoardService = communityBoardService;
    }

    public void setPhotoBoardService(PhotoBoardService photoBoardService) {
        this.photoBoardService = photoBoardService;
    }

    public void setNoticeBoardService(NoticeBoardService noticeBoardService) {
        this.noticeBoardService = noticeBoardService;
    }

    private String sessionInterval;
    private String passwordActivateInterval;

    public String getSessionInterval() {
        return sessionInterval;
    }

    public void setSessionInterval(String sessionInterval) {
        this.sessionInterval = sessionInterval;
    }

    public String getPasswordActivateInterval() {
        return passwordActivateInterval;
    }

    public void setPasswordActivateInterval(String passwordActivateInterval) {
        this.passwordActivateInterval = passwordActivateInterval;
    }
    
}
